home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / other / how-to.pl / Keystroke-HOWTO.pl.txt < prev    next >
Encoding:
Text File  |  1998-02-13  |  9.5 KB  |  397 lines

  1.   Linux Keystroke HOWTO
  2.   Zenon Fortuna zenon@netcom.com
  3.   v2.0, kwiecie± 1995
  4.  
  5.   Wersja polska: Gwidon S. Naskrent naskrent@hoth.amu.edu.pl
  6.   v1.0, 29 X 1997
  7.  
  8.   1.  Co to jest Keystroke-HOWTO?
  9.  
  10.  
  11.   Dokument ten napisany zosta│ dla u┐ytkownik≤w kt≤rzy chc▒ przypisaµ
  12.   specjalne czynno╢ci niekt≤rym klawiszom na klawiaturze. Sugerowana
  13.   metoda to u┐ycie loadkeys(1) b▒d╝ zmiana defkeymap.c i zbudowanie na
  14.   nowo j▒dra.
  15.  
  16.   Tekst ten NIE omawia przemapowywania klawiszy klawiatury, np. Delete
  17.   czy BackSpace. Co do informacji na temat przemapowywania klawiszy
  18.   przeczytaj Backspace Mimi-HOWTO autorstwa Stevena Lee.
  19.  
  20.   MetodΩ opisan▒ poni┐ej przetestowano na j▒drze 1.2.1, zamieszczonym w
  21.   dystrybucji 2.2 Slackware.
  22.  
  23.  
  24.   2.  Historia zmian
  25.  
  26.  
  27.   4 IV 95 - wersja 2.0 Przystosowana do wersji j▒dra 1.2.1; -proste
  28.   zmiany w sugerowanych modyfikacjach pliku "my_keytable.map"
  29.   -zmodyfikowany przyk│ad "key_macro" ze zrzutami ekranu przez /dev/vcs*
  30.  
  31.   7 V  94 - wersja 1.0 Wersja wyj╢ciowa Keystroke-HOWTO, oparta w
  32.   dzia│aniu na wersji j▒dra 1.0
  33.  
  34.  
  35.   3.  Kr≤tki opis
  36.  
  37.  
  38.   Wirtualny terminal Linuxa oraz sterowniki klawiatury przyjmuj▒
  39.   domy╢lny uk│ad klawiatury taki jak zdefiniowany w pliku
  40.   /drivers/char/defkeymap.  c ╝r≤de│ j▒dra. Dwunastu klawiszom
  41.   funkcyjnym PC przydaµ mo┐na │a±cuchy przypisane wykonywanym przez nie
  42.   czynno╢ciom. Po naci╢niΩciu kt≤rego╢ z tych klawiszy, byµ mo┐e z
  43.   dodanymi klawiszami Alt lub Ctrl, bie┐▒cy wirtualny terminal dodaje
  44.   okre╢lony │a±cuch do swoich bufor≤w danych wej╢ciowych i wyj╢ciowych,
  45.   emuluj▒c w efekcie wprowadzenie owego │a±cucha tak jakby zosta│
  46.   wpisany z klawiatury.
  47.  
  48.   Ustawieniem odpowiedniego │a±cucha dla danego klawisza funkcyjnego
  49.   mo┐emy upro╢ciµ wykonywanie wybranych komend, na przyk│ad wywo│uj▒c
  50.   skrypt pow│oki /usr/local/bin/key_macro, kt≤ry mo┐emy utworzyµ i
  51.   modyfikowaµ wedle w│asnego uznania.
  52.  
  53.   3. NarzΩdzia do modyfikacji sterownika klawiatury.
  54.  
  55.   Mo┐emy u┐yµ loadkeys(1), dumpkeys(1) oraz showkey(1):
  56.  
  57.  
  58.   ╖  narzΩdzie loadkeys(1) pomaga za│adowaµ nowe ci▒gi znak≤w do bufor≤w
  59.      klawiatury j▒dra, lub przygotowuje nowy kod w C modyfikuj▒cy j▒dro,
  60.  
  61.   ╖  dumpkeys(1) powinno byµ u┐ywane dla wydostania bie┐▒cego uk│adu
  62.      klawiatury do obejrzenia lub modyfikacji,
  63.  
  64.   ╖  showkey(1) mo┐e nam pomoµ w otrzymaniu kodu klawisza okre╢lonego
  65.      klawisza funkcyjnego.
  66.  
  67.   Je╢li tw≤j system linuxowy nie posiada tych narzΩdzi, mo┐esz je zdobyµ
  68.   poprzez ftp jako pakiet kbd-0.89.tar.gz lub kbd-0.90.tar.gz z
  69.   sunsite.unc.edu:/pub/Linux/system/Keyboards, lub
  70.   tsx-11.mit.edu:/pub/linux/sources/system Powiniene╢ u┐yµ GNUsowskiego
  71.   tar aby wypakowaµ potrzebne pliki.
  72.  
  73.  
  74.   4.  Zmiana pliku uk│adu klawiatury
  75.  
  76.  
  77.   J▒dro Linuxa zawiera skompilowany kod defkeymap.c, kt≤ry tworzony jest
  78.   narzΩdziem loadkeys(1) z pliku defkeymap.map. Oba pliki umieszczone s▒
  79.   w katalogu src/linux/drivers/char.
  80.  
  81.   Potrzebujemy zmodyfikowaµ plik defkeymap.map, tak wiΩc zr≤bmy jego
  82.   lokaln▒ kopiΩ przez
  83.  
  84.  
  85.  
  86.        # cp defkeymap.map my_keytable.map
  87.  
  88.  
  89.  
  90.  
  91.   lub
  92.  
  93.  
  94.  
  95.        # dumpkeys > my_keytable.map
  96.  
  97.  
  98.  
  99.  
  100.   Istnieje tak┐e du┐y zbi≤r r≤┐nych plik≤w z uk│adami klawiatury w
  101.   katalogu /usr/lib/kbd/keytables, z kt≤rych defkeymap.map mo┐e zostaµ
  102.   u┐yty w twoim systemie w miejsce src/linux/drivers/char/defkeymap.map.
  103.  
  104.   Poleca siΩ metodΩ u┐ywaj▒c▒ dumpkeys(1), poniewa┐ zdarzyµ siΩ mo┐e i┐
  105.   twoje j▒dro by│o ju┐ modyfikowane lub utworzony dla ciebie z innym
  106.   plikiem defkeymap.map ni┐ ten kt≤ry mo┐esz znale╝µ.
  107.  
  108.   Przeczytajmy zawarto╢µ pliku my_keytable.map: znajduje siΩ tam ponad
  109.   300 linii kodu, i mo┐emy tam znale╝µ trzy grupy deklaracji: pierwsza
  110.   sk│ada siΩ z linii zawieraj▒cych s│owo "keycode", byµ mo┐e z
  111.   do│▒czonymi dodatkowymi s│owami w rodzaju "alt", "control", itd. Druga
  112.   grupa sk│ada siΩ z linii ze s│owem "string", trzecia z linii ze s│owem
  113.   "compose".
  114.  
  115.   WiΩcej o sk│adni tego pliku mo┐na przeczytaµ w keytables(5)
  116.  
  117.  
  118.   4.1.  Przyk│ad modyfikacji pliku uk│adu klawiatury
  119.  
  120.  
  121.   Jako przyk│ad przypisania makro│a±cucha naci╢niΩciu klawisza
  122.   funcyjnego, ka┐my Ctrl-F1 wywo│ywaµ nasz skrypt
  123.   /usr/local/bin/key_macro.
  124.  
  125.   Po pierwsze powinni╢my dowiedzieµ siΩ jaki jest kod klawisza
  126.   funkcyjnego F1. Mo┐emy narzΩdzia u┐yµ showkey(1) i poznaµ kod
  127.   naciskaj▒c F1.
  128.  
  129.   Zamiast tego mo┐emy poszukaµ ci▒gu "F1" w pliku my_keytable.map i
  130.   znale╝µ nastΩpuj▒c▒ liniΩ:
  131.  
  132.  
  133.                keycode  59 = F1
  134.  
  135.  
  136.  
  137.  
  138.   Sugeruje to ┐e kodem klawisza dla F1 jest 59. Linia ta okre╢la r≤wnie┐
  139.   ┐e po naci╢niΩciu F1 sterownik klawiatury powinien wys│aµ │a±cuch
  140.   oznaczony kodem "F1". Aby zobaczyµ zawarto╢µ tego │a±cucha, poszukaµ
  141.   mo┐na wzoru "string F1" i znale╝µ
  142.  
  143.  
  144.  
  145.                string F1 = "\033[[A"
  146.  
  147.  
  148.  
  149.  
  150.   Oznacza to ┐e po naci╢niΩciu klawisza F1 sterownik klawiatury wysy│a
  151.   "Esc [ [ A" (bez spacji).
  152.  
  153.   Nie powinni╢my zmieniaµ tego │a±cucha, poniewa┐ niekt≤re aplikacje
  154.   polegaj▒ na nim jako na domy╢lnej czynno╢ci klawisza F1.
  155.  
  156.   Mo┐emy jednak zdefiniowaµ now▒ czynno╢µ dla Ctrl-F1, za│o┐ywszy ┐e nie
  157.   jest ona zarezerwowana przez j▒dro dla innych specjalnych czynno╢ci.
  158.   Aby obejrzeµ przypisania klawisza F1 razem z Ctrl, Shift i innymi
  159.   trybami, mo┐emy zagl▒dn▒µ do pliku my_keytable.map u┐ywaj▒c:
  160.  
  161.  
  162.  
  163.        # grep 59 my_keytable.map
  164.  
  165.  
  166.  
  167.  
  168.   W przypadku gdy nie ma tam linii z "control keycode 59", mo┐emy u┐yµ
  169.   Ctrl-F1 bez problem≤w (gdy istnieje linia z "shift control keycode 59
  170.   nadal wszystko jest ok).
  171.  
  172.   Dodajmy nastΩpuj▒c▒ liniΩ do pliku my_keytable.map:
  173.  
  174.  
  175.  
  176.        control keycode 59 = key_symbol
  177.  
  178.  
  179.  
  180.  
  181.   gdzie "key_symbol" okre╢laµ bΩdzie czynno╢µ klawisza Ctrl-F1. J▒dro
  182.   1.2.* pozwala na dynamiczn▒ alokacjΩ │a±cuch≤w, ale nazwa dla
  183.   "key_symbol" musi zostaµ wybrana tylko z ustalonego zbioru nazw.
  184.   MiΩdzy innymi dozwolone s▒ symbole F1-F246. Dla my_keytable.map w moim
  185.   systemie nieu┐ywane by│o F21, ale powiniene╢ obejrzeµ sw≤j plik i
  186.   wybraµ odpowiedni klawsym. Mo┐emy wiΩc dopisaµ liniΩ:
  187.  
  188.  
  189.  
  190.             control keycode 59 = F21
  191.  
  192.  
  193.  
  194.  
  195.   Teraz musimy zdefiniowaµ zawarto╢µ F21, dodaj▒c liniΩ
  196.  
  197.  
  198.  
  199.        string F21 = "/usr/local/bin/key_macro\n"
  200.  
  201.  
  202.  
  203.  
  204.   Podsumowywuj▒c, uczynili╢my dwie zmiany w stosunku do oryginalnego
  205.   my_keytable.map: zadeklarowali╢my nowy │a±cuch F21 oraz to ┐e Ctrl-F1
  206.   bΩdzie wywo│ywaµ zawarto╢µ F21.
  207.  
  208.  
  209.   4.2.  Czasowe zmiany w ustawieniach klawiatury
  210.  
  211.  
  212.   Zmieniwszy w│a╢ciwie my_keytable.map mo┐emy skopiowaµ zmiany do
  213.   sterownika klawiatury j▒dra u┐ywaj▒c narzΩdzia loadkeys(1):
  214.  
  215.  
  216.  
  217.        % loadkeys my_keytable.map
  218.  
  219.  
  220.  
  221.  
  222.   Pozwolenie modyfikacji sterownika klawiatury j▒dra dawane jest ka┐demu
  223.   kto posiada prawa odczytu urz▒dzenia /dev/console.
  224.  
  225.   Aby sprawdziµ czy zamierzone zmiany zosta│y zainstalowane, mo┐emy u┐yµ
  226.   narzΩdzia dumpkeys(1) by sprawdziµ warto╢µ F21, na przyk│ad:
  227.  
  228.  
  229.  
  230.        % dumpkeys | grep F21
  231.  
  232.  
  233.  
  234.  
  235.   Mo┐emy zobaczyµ:
  236.  
  237.  
  238.  
  239.        keycode 59 = F1         F11     Console_13      F21
  240.  
  241.        string F21 = "/usr/local/bin/key_macro\012"
  242.  
  243.  
  244.  
  245.  
  246.   co jest ok, bowiem "\012", lub LF, odpowiada \n
  247.  
  248.   Teraz naci╢niΩcie Ctrl-F1 powinno wywo│aµ skrypt
  249.   /usr/local/bin/key_macro, tak jak zamierzali╢my.
  250.  
  251.  
  252.   4.3.  Zmiany na sta│e
  253.  
  254.  
  255.   Zmiany w sterowniku klawiatury j▒dra narzucone loadkeys(1) trwaj▒ do
  256.   nastΩpnego prze│adowania systemu (albo nastΩpnego odwo│ania do
  257.   loadkeys).
  258.  
  259.   Mo┐emy zmieniµ plik /etc/rc.d/rc.local aby wywo│a│ loadkeys z naszym
  260.   plikiem my_keytable.map jako argumentem. Zamiast tego zmodyfikowaµ
  261.   mo┐emy src/linux/drivers/char/defkeymap.c i ponownie skompilowaµ j▒dro
  262.   z nowymi warto╢ciami domy╢lnymi.
  263.  
  264.  
  265.   Nie powinni╢my zmieniaµ pliku defkeymap.c rΩcznie, lecz raczej
  266.   wygenerowaµ go narzΩdziem loadkeys(1):
  267.  
  268.  
  269.  
  270.        # mv defkeymap.c defkeymap.c.ORIG
  271.        # loadkeys --mktable my_keytable.map > defkeymap.c
  272.  
  273.  
  274.  
  275.  
  276.   NastΩpnie powinni╢my wygenerowaµ nowe j▒dro, zasadniczo zmieniaj▒c
  277.   katalog na bazowy katalog ╝r≤de│ j▒dra, i u┐ywaj▒c make(1).
  278.  
  279.   W ko±cu, powinni╢my u┐yµ lilo(1) aby zainstalowaµ i za│adowaµ nasze
  280.   nowe j▒dro.
  281.  
  282.  
  283.   5.  Przyk│ad skryptu key_macro
  284.  
  285.  
  286.   Szczeg≤lnie u┐ytecznym skryptem dla prostych operacji zwi▒zanych z
  287.   naciskaniem klawiszy mo┐e byµ skrypt pow│oki przygotowywuj▒cy, b▒d╝
  288.   drukuj▒cy, zrzut ekranu.
  289.  
  290.   Przyk│ad ten uleg│ zmianie od czas≤w wersji 1.0 Linuxa, z powodu zmian
  291.   w j▒drze, kt≤re nie udostΩpnia ju┐ wywo│ania systemowego
  292.   ioctl(0,TIOCLINUX).
  293.  
  294.   Aby przeczytaµ zrzuty ekranu wirtualnej konsoli nale┐y wpierw
  295.   przygotowaµ parΩ plik≤w urz▒dze±. Jako root mo┐emy stworzyµ co
  296.   nastΩpuje:
  297.  
  298.  
  299.  
  300.        # mknod /dev/vcs1  c 7 1
  301.        # mknod /dev/vcs2  c 7 2
  302.        ...
  303.        # mknod /dev/vcs63 c 7 63
  304.  
  305.  
  306.  
  307.  
  308.   Oczywi╢cie wystarczy mieµ tylko pliki /dev/vcs* odpowiednie dla
  309.   wirtualnych konsoli kt≤rych siΩ u┐ywa.
  310.  
  311.   Kod poni┐ej powinien byµ uwa┐any za przyk│ad mo┐liwego pliku
  312.   /usr/local/bin/key_macro:
  313.  
  314.  
  315.  
  316.        #!/bin/sh
  317.        #
  318.        # Oto przyk│ad u┐ytecznego skryptu key_macro
  319.        #
  320.  
  321.        VT_NUMBER=`tty|cut -c9-`
  322.        FILE=/tmp/vt$VT_NUMBER.dump
  323.        cp /dev/vcs$VT_NUMBER $FILE
  324.        echo zrzut ekranu zachowany w $FILE
  325.        #
  326.        # Odkomentuj poni┐sz▒ liniΩ gdy chcesz by zrzut by│ drukowany
  327.        # lpr $FILE
  328.  
  329.  
  330.  
  331.   6.  Uwagi
  332.  
  333.  
  334.   Nie ma praktycznego limitu sumy d│ugo╢ci wszystkich │a±cuch≤w kt≤re
  335.   mogliby╢my chcieµ za│adowaµ do sterownika klawiatury. Poprzedni sta│y
  336.   bufor d│ugo╢ci FUNC_BUFSIZE (ustawiony na 512 bajt≤w) zosta│ w Linuxie
  337.   1.2.* zast▒piony strategi▒ dynamicznego przydzielania bufor≤w w
  338.   kawa│kach po 512 bajt≤w ka┐dy.
  339.  
  340.   Naj╢wie┐sz▒ kopiΩ Keystroke-HOWTO znale╝µ mo┐na w
  341.  
  342.   <>"ftp.netcom.com:/pub/ze/zenon/linux/howto"
  343.   name="ftp.netcom.com:/pub/ze/zenon/linux/howto">
  344.  
  345.  
  346.   7.  Dalsze pomys│y?
  347.  
  348.  
  349.   W razie gdyby╢ znalaz│ co╢ wartego dodania do tego dokumentu, prze╢lij
  350.   proszΩ swoje uwagi na adres  <>"mailto:zenon@netcom.com" name=
  351.   "zenon@netcom.com"> - dziΩki (zf).
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.